package vip.ifmm.lehouse.file.service.utils;

import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @author: mackyhuang
 * <p>email: mackyhuang@163.com <p>
 * <p>date: 2019/6/16 </p>
 */
public class UploaderUtil {

    /**
     *
     * @param file
     * @param targetAddr
     * @return
     */
    private static String uploadFileBybyte(byte[] file, String targetAddr, String extension) {
        //获取文件的随机名
        String realFileName = PrepareForUploaderUtil.getRandomFileName();
        //获取文件的拓展名
        //String extension = PrepareForUploaderUtil.getFileExtension(file);
        //如果传进来的路径不存在，那么就创建一个目录
        PrepareForUploaderUtil.makeDirPath(targetAddr);
        //将 路径 文件随机名 扩展名 拼接 生成将要使用于存储的后半部分主要路径名
        String relativeAddr = targetAddr + realFileName + extension;
        //将 图片存储在服务器里面的真实根路径，和上面的得到的相对路径进行拼接
        //获得的是最后的图片存储地址，用于thumbnailator的存储
        Path path = Paths.get(PrepareForUploaderUtil.getTypeBasePath() + relativeAddr);
        try {
            Files.write(path, file);
        } catch (IOException e) {
            throw new RuntimeException("文件上传失败：" + e.toString());
        }
        return relativeAddr;
    }

    /**
     * 对外的调用的 上传文件
     *
     * @param uniqueId 唯一的标识符 一般是数据库里面这个文件的主键id 用于生成唯一文件夹
     * @param file     上传上来的文件
     * @param module   你需要的上传以后的文件的文件夹名字 一般是业务模块名
     * @return
     */
    public static String upload(String uniqueId, byte[] file, String module, String extension) {
        String dest = PrepareForUploaderUtil.getModulePath(uniqueId, module);
        String realPath = UploaderUtil.uploadFileBybyte(file, dest, extension);
        return realPath;
    }

}
